package com.zbj.data.jpa.service;

import com.zbj.data.jpa.entity.Teacher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * TeacherService
 * @author weigang
 * @create 2017-09-13
 **/
public interface TeacherService {


	/**
	 * 通过老师名称分页查询老师对象
	 * @param pageable 分页对象
	 * @return
	 */
	Page<Teacher> findNoCriteria(Pageable pageable);

	/**
	 *
	 * @param name 老师名称
	 * @param pageable 分页对象 包含排序对象 可以支持多个排序 new Sort(Order... orders)
	 * @return
	 */
	Page<Teacher> findByNameLike(String name, Pageable pageable);

	/**
	 * 动态查询
	 * @param name
	 * @param startDate
	 * @param addressLike
	 * @param ages
	 * @return
	 */
	Page<Teacher> findByDynamicQuery(String name, Date startDate, String addressLike, Collection<Integer> ages);

	/**
	 * 基于原生态的sql进行查询
	 */
	List<Object[]> groupByTeacherAsSql();

	/**
	 * 基于Hibernate的HQL进行查询
	 * @return
	 */
	List<Object[]> groupByTeacherAsHql();

	/**
	 * 基于Specification的方式进行查询，使用的是CriteriaQuery进行查询
	 * @return
	 */
	List<Object[]> groupByTeacherAsSpecification();

	int updateTeacherPhoneByName(String phone, String name);

	int updatePhoneByName(String phone, String name);

	int deletePhoneByName(String name);
}
